/*
 * @copyright Copyright (c) 2010 Laboratório de Educação Cerebral. (http://www.educacaocerebral.com.br)
 *
 * This file is part of SoftVFC.
 *
 * SoftVFC is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * SoftVFC is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with SoftVFC.  If not, see <http://www.gnu.org/licenses/>.
 *
 * *********************
 *
 * Este arquivo é parte do programa SoftVFC.
 *
 * SoftVFC é um software livre; você pode redistribui-lo e/ou
 * modifica-lo dentro dos termos da Licença Pública Geral GNU como
 * publicada pela Fundação do Software Livre (FSF); na versão 3 da
 * Licença.
 *
 * Este programa é distribuido na esperança que possa ser util,
 * mas SEM NENHUMA GARANTIA; sem uma garantia implicita de ADEQUAÇÂO a qualquer
 * MERCADO ou APLICAÇÃO EM PARTICULAR. Veja a
 * Licença Pública Geral GNU para maiores detalhes.
 *
 * Você deve ter recebido uma cópia da Licença Pública Geral GNU
 * junto com este programa, se não, acesse no website oficial:
 * http://www.gnu.org/licenses/gpl.html
 *
 */
package org.softvfc.dialog.notify;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
import org.openide.awt.NotificationDisplayer;


public class NotifyDialog {

    private NotifyDialog() {}

    /**
    * Show message with the specified type and action listener
    */
    public static void notify(String title, String message, NotifyType type, ActionListener actionListener) {
        NotificationDisplayer.getDefault().notify(title, type.getIcon(), message, actionListener);
    }

    /**
    * Show message with the specified type and a default action which displays the
    * message using {@link MessageUtil} with the same message type
    */
    public static void notify(String title, final String message, final NotifyType type) {
        ActionListener actionListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e){ 
                DialogDisplayer.getDefault().notify(new NotifyDescriptor.Message(message, type.getNotifyDescriptorType()));
            }
        };

        notify(title, message, type, actionListener);
    }

    /**
    * Show an information notification
    * @param message
    */
    public static void information(String title, String message){
        notify(title, message, NotifyType.INFORMATION_MESSAGE);
    }

    /**
    * Show an exception notification
    * @param message
    */
    public static void exception(String title, String message) {
        notify(title, message, NotifyType.ERROR_MESSAGE);
    }

    /**
    * Show an exception notification for an exception
    * @param message
    * @param exception
    */
    public static void exception(String title, final String message, final Throwable exception) {
        ActionListener actionListener = new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                DialogDisplayer.getDefault().notify(new NotifyDescriptor.Confirmation(exception, message));
            }
        };

        notify(title, message, NotifyType.ERROR_MESSAGE, actionListener);
    }

    /**
    * Show an warning notification
    * @param message
    */
    public static void warning(String title, String message) {
        notify(title, message, NotifyType.WARNING_MESSAGE);
    }

    /**
    * Show an plain notification
    * @param message
    */
    public static void plain(String title, String message) {
        notify(title, message, NotifyType.PLAIN_MESSAGE);
    }
}

